제3장 자료구조

  1. 제3장 자료구조
    1. 3.5 단순 연결 리스트 응용 - 명함관리
    2. 문서에 대하여

3.5 단순 연결 리스트 응용 - 명함관리

설명



public class NameCardNode {
	private String name;
	private String phoneNumber;
	NameCardNode link = null;
	
	public NameCardNode() {
		// TODO Auto-generated constructor stub
		this.name = null;
		this.link = null;
	}
	
	public NameCardNode(String data, String phoneNumber, NameCardNode node) {
		// TODO Auto-generated constructor stub
		this.name = data;
		this.link = node;
		this.phoneNumber = phoneNumber;
	}
	
	public NameCardNode(String data, String phoneNumber) {
		// TODO Auto-generated constructor stub
		this.name = data;
		this.phoneNumber = phoneNumber;
	}
	

	
	public String getData() {
		return "이름 : " + this.name + " 연락처 : " + this.phoneNumber;
	}

	public String getName() {
		return name;
	}
}



public class NameCardNodeList {
private NameCardNode head = null;
	
	public NameCardNodeList() {
		// TODO Auto-generated constructor stub
		this.head = null;		
	}
	
	public void insertFirstNode(String name, String phoneNumber){
		NameCardNode newNode = new NameCardNode(name, phoneNumber);				
		if (this.head == null) {
			this.head = newNode;
		}
		else{
			NameCardNode tmpListNode = head;
			this.head = newNode;
			newNode.link = tmpListNode;			
		}		
	}
	
	public void insertMiddleNode(NameCardNode pre, String name, String phoneNumber){       
		NameCardNode newNode = new NameCardNode(name, phoneNumber);
		newNode.link = pre.link;
		pre.link = newNode;
	}
	
	public void insertLastNode(String name, String phoneNumber){
		NameCardNode newNode = new NameCardNode(name, phoneNumber);
		if(head == null){
			this.head = newNode;
		}
		else{
			NameCardNode temp = head;
			while(temp.link != null) temp = temp.link;
			temp.link = newNode;
		}
	}	

	public void deleteLastNode(){
		NameCardNode pre, temp;
		if(head == null)  return;
		if(head.link == null){
			head = null;
		}
		else{
			pre = head;
			temp = head.link;
			while(temp.link != null){
				pre = temp;
				temp = temp.link;
			}
			pre.link = null;
		}
	}
	
	public NameCardNode searchNode(String data){
		NameCardNode temp = this.head;
		while(temp != null){
			if(data == temp.getName())  
				return temp;
			else temp = temp.link;
		}
		return  temp;
	}
	
	public void reverseList(){
		NameCardNode next = head;
		NameCardNode current = null;
		NameCardNode pre = null;
		while(next != null){
			pre = current;
			current = next;
			next = next.link;
			current.link = pre;
		}
		head = current;
	}

	public void printList(){
		NameCardNode temp = this.head;
		System.out.printf("L = (");
		while(temp != null){
			System.out.printf(temp.getData());
			temp = temp.link;
			if(temp != null){
				System.out.printf(", ");
			}			
		}
		System.out.println(")");
	}
}


public class NameCardNodeListMain {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		NameCardNodeList L = new NameCardNodeList();
		System.out.println("(1) 새로운 인명 등록 하기");
		L.insertLastNode("허용운","777-7777");
		L.insertLastNode("강정식","123-4567");
		L.insertLastNode("김동훈","999-8888");
		L.printList();

		System.out.println("(2) 맨앞에 장윤정 인명 삽입하기");
		L.insertFirstNode("장윤정", "123-7654");
		L.printList();
				
		System.out.println("(3) 푸르나 주소를 찾고 정보를 출력");
		NameCardNode pre = L.searchNode("푸르나");

		if(pre == null) 
			System.out.println("검색실패>> 찾는 데이터가 없습니다.");

		System.out.println("(4) 강정식 주소를 찾고 정보를 출력");
		pre = L.searchNode("강정식");		
		System.out.println(pre.getData());
		
		System.out.println("(5) 리스트의 노드를 역순으로 바꾸기");
		L.reverseList();
		L.printList();

		System.out.println("(6) 리스트의 마지막 노드 삭제하기");      
		L.deleteLastNode();
		L.printList();
	}
}

문서에 대하여

  • 이 문서의 내용은 C로 배우는 알고리즘 (1) 교재를 스터디 하면서 정리한 내용 입니다.
  • 최초작성자 : 허용운
  • 최초작성일 : 2009년 2월 25일
  • 이 문서는 오라클클럽 자바 웹개발자 스터디 모임에서 작성하였습니다.
  • 이 문서를 다른 블로그나 홈페이지에 퍼가실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^\^